/*
* Flingbox - An OpenSource physics sandbox for Google's Android
* Copyright (C) 2009 Jon Ander Peñalba & Endika Gutiérrez
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package edu.eside.flingbox;
import edu.eside.flingbox.bodies.Body;
import edu.eside.flingbox.scene.Scene;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.SeekBar;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.SeekBar.OnSeekBarChangeListener;
public class BodySettingsDialog extends Dialog {
/** Contains Body to change properties */
protected final Body mBody;
protected final Scene mScene;
public BodySettingsDialog(Context context, final Body body,
final Scene scene) {
super(context);
// mContext = context;
mBody = body;
mScene = scene;
}
/**
* Called when the dialog is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
// Set dialog content
setContentView(R.layout.body_settings);
// Sets dialog title
setTitle(R.string.body_settings_name);
/*
* Lock Body Checkbox
*/
CheckBox lockBodyCheckbox = (CheckBox) findViewById(R.id.checkbox_lock_body);
lockBodyCheckbox.setChecked(mBody.getPhysics().isFixed());
lockBodyCheckbox
.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton arg0,
boolean arg1) {
mBody.getPhysics().setBodyFixed(arg1);
}
});
/*
* Density SeekBar
*/
SeekBar densitySeekBar = (SeekBar) findViewById(R.id.seek_bodys_density);
densitySeekBar.setMax(400); /* Density is between [-200, 199] */
densitySeekBar.setProgress((int) (Math.log( /* Logaritmical progress */
mBody.getPhysics().getDensity()) * 10f + 200f));
densitySeekBar
.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
public void onProgressChanged(SeekBar seekBar,
int progress, boolean fromUser) {
if (!fromUser)
return;
/* Density is adjusted exponentially */
mBody.getPhysics()
.setDensity(
(float) Math.exp(((float) seekBar
.getProgress() - 200f) / 10f));
}
public void onStartTrackingTouch(SeekBar seekBar) {
}
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
/*
* Restitution SeekBar
*/
SeekBar restitutionSeekBar = (SeekBar) findViewById(R.id.seek_restitution_coef);
restitutionSeekBar.setMax(1024);
restitutionSeekBar.setProgress((int) (mBody.getPhysics()
.getRestitutionCoeficient() * 1024));
restitutionSeekBar
.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
public void onProgressChanged(SeekBar seekBar,
int progress, boolean fromUser) {
if (!fromUser)
return;
mBody.getPhysics().setRestitutionCoeficient(
(float) progress / 1024f);
}
public void onStartTrackingTouch(SeekBar seekBar) {
}
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
/*
* Static friction SeekBar
*/
SeekBar staticFrictionSeekBar = (SeekBar) findViewById(R.id.seek_static_friction);
staticFrictionSeekBar.setMax(1024);
staticFrictionSeekBar.setProgress((int) (mBody.getPhysics()
.getStaticFrictionCoeficient() * 1024));
staticFrictionSeekBar
.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
public void onProgressChanged(SeekBar seekBar,
int progress, boolean fromUser) {
if (!fromUser)
return;
mBody.getPhysics().setStaticFrictionCoeficient(
(float) progress / 1024f);
}
public void onStartTrackingTouch(SeekBar seekBar) {
}
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
/*
* Kinetic friction SeekBar
*/
SeekBar kineticFrictionSeekBar = (SeekBar) findViewById(R.id.seek_kinetic_friction);
kineticFrictionSeekBar.setMax(1024);
kineticFrictionSeekBar.setProgress((int) (mBody.getPhysics()
.getDynamicFrictionCoeficient() * 1024));
kineticFrictionSeekBar
.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
public void onProgressChanged(SeekBar seekBar,
int progress, boolean fromUser) {
if (!fromUser)
return;
mBody.getPhysics().setDynamicFrictionCoeficient(
(float) progress / 1024f);
}
public void onStartTrackingTouch(SeekBar seekBar) {
}
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
Button removeButton = (Button) findViewById(R.id.button_remove_body);
removeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mScene.remove(mBody);
cancel();
}
});
}
}